﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using Novapangeia.Dominio;
using Novapangeia.RepositorioNHibernate;
using SharpArch.Data.NHibernate;

namespace Novapangeia.Negocio
{
    public class GerenciadorTropas
    {
        public RepositorioTropa RepositorioTropa;

        public GerenciadorTropas() 
        {
            this.RepositorioTropa = new RepositorioTropa();
        }

        public void CriarTropa(Usuario u, String nome) {

            Tropa tropa = new Tropa(u, nome, u.Cordenada_X, u.Cordenada_Y, false);
            RepositorioTropa.Save(tropa);
        }

        public Tropa ConsultarTropaPeloId(int id)
        {
            return RepositorioTropa.Get(id);
        }

        public bool remanejarTropas(int origemId, int destinoId, int quantidade, int tipoUnidadeId){
            Tropa tropaOrigem = ConsultarTropaPeloId(origemId);
            Tropa tropaDestino = ConsultarTropaPeloId(destinoId);
            if (tropaOrigem.RemoverUnidade(tipoUnidadeId, quantidade)) 
            {
                AdicionarUnidade(tropaDestino,tipoUnidadeId, quantidade);

                RepositorioTropa.Update(tropaOrigem);
                RepositorioTropa.Update(tropaDestino);

                return true;
            }
            return false;
        }

        public void AdicionarUnidade(Tropa tropa, int tipoUnidadeId, int quantidade)
        {

            if (tropa.Unidades.FirstOrDefault(u => u.tipo.Id == tipoUnidadeId) != null)
            {
                tropa.Unidades.FirstOrDefault(u => u.tipo.Id == tipoUnidadeId).Quantidade += quantidade;
            }
            else
            {
                Unidade u = new Unidade();
                RepositorioTipoUnidade repositorioTipoUnidade = new RepositorioTipoUnidade();
                u.tipo = repositorioTipoUnidade.Get(tipoUnidadeId);
                tropa.Unidades.Add(u);
            }
        }
    }
}

